﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

using BUS;
using DTO;

namespace Control
{
    public partial class ctrlBangCap : DevExpress.XtraEditors.XtraUserControl
    {
        public ctrlBangCap()
        {
            InitializeComponent();

            #region "Config thuộc tính cho gridview"
            //không cho phép thêm dòng
            this.gridView1.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.False;
            //không cho phép xóa dòng
            this.gridView1.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.False;
            //không cho phép chỉnh sửa trên grid
            this.gridView1.OptionsBehavior.Editable = false;
            //Thêm bộ lọc
            this.gridView1.OptionsFind.AlwaysVisible = true;
            //Không cho hiển thị menu khi bấm phím phải chuột vào header
            this.gridView1.OptionsMenu.EnableColumnMenu = false;
            //không hiển thị "Drag a column header to group by that column"
            this.gridView1.OptionsView.ShowGroupPanel = false;
            //Chọn vị trí khi thêm dòng mới (chỉ sử dụng khi edit trên grid)
            //this.gridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;
            #endregion
        }

        #region "Properties"
        List<BangCapDTO> list = null;
        #endregion

        private void ctrlBangCap_Load(object sender, EventArgs e)
        {
            //load dữ liệu vào grid
            gridView_LoadDuLieu();
        }

        private void gridView_LoadDuLieu()
        {
            //Đọc dữ liệu đưa lên grid
            list = BangCapBUS.DocDanhSach();

            //gán datasource
            gridControl1.DataSource = list;
            //gridView1.DataSource = list;// không thực hiện được vì read only 
        }

        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            //thêm dữ liệu vào cho cột số thứ tự
            if (e.Column == gridColumnSTT)
                e.DisplayText = (e.RowHandle + 1).ToString();
        }
        
        //Hiển thị dữ liệu từ grid vào textbox
        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            txtTenBangCap.Text = (string)gridView1.GetRowCellValue(e.FocusedRowHandle, gridColumnTenBangCap);

        }
        
        private bool KiemTra()
        {
            //không cho textbox tenbangcap để trống
            if (txtTenBangCap.Text.Trim() == "")
            {
                MessageBox.Show("Tên bằng cấp không được để trống", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            //kiểm tra textbox có để trống hay không, ...
            if (KiemTra() == false)
                return;

            try
            {
                //tạo dto
                BangCapDTO dto = new BangCapDTO { TenBangCap = txtTenBangCap.Text };

                //đưa xuống bus
                BangCapBUS.Them(dto,list);

                //Đưa dữ liệu vừa thêm vào list
                list.Add(dto);
                //load lại grid
                gridControl1.RefreshDataSource();

                //hiển thị thông báo thành công
                MessageBox.Show("Thêm thành công!!!");
            }
            catch (Exception ex)
            {
                //hiển thị thông báo lỗi nếu bị lỗi
                MessageBox.Show(ex.Message,"Lỗi!!!",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            try
            {
                //lấy dòng đang được chọn trên grid
                BangCapDTO dto = (BangCapDTO)gridView1.GetRow(gridView1.FocusedRowHandle);
                
                //đưa xuống bus
                BangCapBUS.Xoa(dto);
                
                //xóa khỏi list
                list.Remove(dto);
                //Bỏ dữ liệu vừa xóa ra khỏi grid
                gridControl1.RefreshDataSource();

                //gridView1.DeleteRow(gridView1.FocusedRowHandle);
                //load lại grid
                //gridView_LoadDuLieu();

                //hiển thị thông báo thành công
                MessageBox.Show("Xóa thành công!!!");
            }
            catch (Exception ex)
            {
                //báo lỗi
                MessageBox.Show(ex.Message, "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            //kiểm tra textbox có để trống hay không, ...
            if (KiemTra() == false)
                return;

            try
            {
                //lấy dòng đang được chọn trên grid
                BangCapDTO dtoBangCap = (BangCapDTO)gridView1.GetRow(gridView1.FocusedRowHandle);

                //lấy mã dòng đang được chọn trên grid
                //int maBangCap = (int)gridView1.GetRowCellValue(gridView1.FocusedRowHandle, gridColumnMaBangCap);

                //tạo dto
                BangCapDTO dto = new BangCapDTO { MaBangCap = dtoBangCap.MaBangCap, TenBangCap = txtTenBangCap.Text.Trim() };

                //đưa xuống bus
                BangCapBUS.CapNhat(dto, list);

                //nếu như cập nhật thành công thi sửa lại dòng dữ liệu trên grid
                //sửa lại trên list
                list[gridView1.FocusedRowHandle].TenBangCap = dto.TenBangCap;
                gridControl1.RefreshDataSource();

                //gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridColumnTenBangCap, txtTenBangCap.Text.Trim());
                //load lại grid
                //gridView_LoadDuLieu();

                //hiển thị thông báo thành công
                MessageBox.Show("Cập nhật thành công!!!");
            }
            catch (Exception ex)
            {
                //báo lỗi
                MessageBox.Show(ex.Message, "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Đưa chuột ra khỏi textbox
        private void txtTenBangCap_Leave(object sender, EventArgs e)
        {
            //if (txtTenBangCap.Text.Trim() == "")
            //{
            //    dxErrorProvider1.SetError(this.txtTenBangCap, "Tên bằng cấp khác rỗng");
            //}
        }
    }
}
